iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
自我挑戰組

Spring Boot 三十天挑戰賽系列 第 7

Day 07 - Useful Tools - 好用且強大的工具 (2)

  • 分享至 

  • xImage
  •  

趕文的步伐應該是輕快的,今日 BGM 是才女 Griff 的 Walk ~
Yes

Java 的 Spring Boot 框架已經成為現代微服務架構的標配。而在昨天也提到 IntelliJ 這個大家喜愛的 IDE,基於 IntelliJ 而來介紹幾個好用的插件

  1. Lombok

什麼是 Lombok?

Lombok 是一個 Java library(因此要記得於 pom.xmlgradle.build 中加入依賴),它提供了一系列 @Annotation,幫助開發者減少重複程式碼。通常在開發時會需要為每個 Class 撰寫許多標準的方法,如 getterssettersequalshashCodetoString 方法。Lombok 通過註解自動於編譯時生成這些方法,從而減少錯誤並提高開發速度。

Lombok 推薦使用的註解:

  • @Getter@Setter
  • @ToString
  • @EqualsAndHashCode 這個註解會自動生成 equals 和 hashCode 方法
  • @NoArgsConstructor@RequiredArgsConstructor@AllArgsConstructor:自動生成無參建構子、包含所有 final 和 @NonNull 建構子,以及全參建構子。
    • 需要注意有全參建構子就一定要加上無參建構子,不然會踩到 Spring Data JPA 無參 constructor 的坑
  • @Data: 這是一個全能註解,一次性的包含了 @ToString, @EqualsAndHashCode, @Getter, @Setter@RequiredArgsConstructor 的功能。
    • 如果有 lazy loading 需求,要將 @Data 中結合的 @Getter @Setter 等拆分出來避免踩坑,關聯時尤其要小心
  • @Builder:自動生成建造者模式(Builder Pattern)
    • 有一個使用者 class

      import lombok.Builder;
      
      @Builder
      public class User {
          private String name;
          private String email;
          private int age;
      }
      
    • 現在要 new 出一個新的使用者非常快速方便(且可自建想要加入的屬性)

      User user = User.builder()
                      .name("AliMeowMeow")
                      .email("alimeowmeow@example.com")
                      .age(5)
                      .build();
      
    • 但要注意,如果有用到其他建構子,同時還使用 @Builder,請一定要補上無參建構子,Java 是不是自動幫你補上無參的 constructor 的

  • @Value:用來創建都是 final 不可變的值,且具有 getter 方法而無 setter 方法(因其為 final 不可變),資料正規化後如有不變的 class 可加 @Value 註解或直接改用 JDK16 後出現的 record

Lombok 的優點:

  1. 簡潔: 透過減少重複程式碼,Lombok 可以使其更為簡潔、清晰。
  2. 提高生產力: 不需要手動撰寫大量標準方法,開發者可以專注於業務邏輯。
  3. 減少錯誤: 手動撰寫方法容易出錯,特別是 equals 和 hashCode。Lombok 能保證生成的方法是正確的。

Lombok 的缺點和風險:

  1. 學習曲線: 對於初次接觸 Lombok 的開發者,他們需要花時間學習和理解這些註解。
  2. 過度使用: 使用過多的 Lombok 註解可能會使程式碼過於簡化,使其他開發者難以理解。
  3. 與其他工具的兼容性: 在某些情況下,Lombok 可能與其他程式碼生成或分析工具不完全兼容。
  4. 侵入性:Lombok 是一個侵入性極強的工具,只要有人用,整個專案就必須跟著使用,因此開發中是否使用 Lombok 須取得團隊共識

上一篇
Day 06 - Useful Tools - 好用且強大的工具
下一篇
Day 08 - Directory Structure - Spring Boot 目錄結構
系列文
Spring Boot 三十天挑戰賽30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言